home *** CD-ROM | disk | FTP | other *** search
- This describes how to get Virge and Virge/DX cards working under
- UAE-JIT if you are using Linux.
-
- ************************************************************************
- * EVERYTHING DESCRIBED IN HERE IS A HACK. IF YOU MANAGE TO DAMAGE YOUR *
- * HARDWARE, SOFTWARE OR DATA --- BAD LUCK! I AM NOT LIABLE IN ANY WAY! *
- * IF THE IDEA OF USING A COMMAND-LINE FRIGHTENS YOU, DO NOT READ ON! *
- ************************************************************************
-
- OK, scared yet? No need to be --- just follow the instructions, and if
- things don't work, experiment a bit before you send a cry for help my
- way, OK?
-
-
- A) The Easy Part --- a single Virge
- ===================================
-
- To use a Virge PCI card under UAE-JIT, you need several things:
-
- * A Virge card (well, duh!)
- * Another gfx card that you will use for your X display (This is
- important! You must not use the Virge for this! If all else fails,
- try a remote X server)
- * The CGX3 Virge drivers from http://www.vgr.com/mediator/
- Get the October 26th release.
- * The pci.library that comes with UAE-JIT
- * XFree86 4.0x
- * A halfway recent linux kernel
- * A pci enabled version of UAE-JIT (i.e. something "bleeding edge",
- and newer than Everton. You probably already have it if you read
- this!)
-
- Now put the Virge card into a PCI slot on your machine, make sure it
- is *not* the card the machine uses to boot (look for "initialize VGA first"
- in the BIOS, sometimes hidden in some rather unintuitive place, and set
- it to "AGP"). Boot into linux, and at a command line type
-
- # pcitweak -l
-
- (the '#' is the shell prompt I use. Don't type it!)
- You should get output that looks something like this:
-
- PCI: Probing config type using method 1
- PCI: Config type is 1
- PCI: PCI scan (all values are in hex)
- PCI: 00:00:0: chip 8086,7190 card 0000,0000 rev 03 class 06,00,00 hdr 00
- PCI: 00:01:0: chip 8086,7191 card 0000,0000 rev 03 class 06,04,00 hdr 01
- PCI: 00:07:0: chip 8086,7110 card 0000,0000 rev 02 class 06,01,00 hdr 80
- PCI: 00:07:1: chip 8086,7111 card 0000,0000 rev 01 class 01,01,80 hdr 00
- PCI: 00:07:2: chip 8086,7112 card 0000,0000 rev 01 class 0c,03,00 hdr 00
- PCI: 00:07:3: chip 8086,7113 card 0000,0000 rev 02 class 06,80,00 hdr 00
- PCI: 00:09:0: chip 10ec,8029 card 0000,0000 rev 00 class 02,00,00 hdr 00
- PCI: 00:0d:0: chip 5333,8a01 card 5333,8a01 rev 01 class 03,00,00 hdr 00
- PCI: 00:0f:0: chip 5333,8a01 card 5333,8a01 rev 01 class 03,00,00 hdr 00
- PCI: 01:01:0: chip 1023,9750 card 1023,9750 rev f3 class 03,00,00 hdr 00
- PCI: End of PCI scan
-
- What you are looking for are lines that have "5333,8a01" or "5333,5631" in
- them (those are Virge/DX and Virge cards, respectively). Take down the
- field that looks like "00:0d:0" for those lines. That's the identifier for
- those cards. Yes, I have two in the machine I took the example from.
- You might also want to write down the identifier for your "main" graphics
- card. That should be the only other one that has "class 03", and often
- lives on its own bus (that's the first field in the identifier).
-
- Next, you need to tell UAE-JIT about the PCI cards it is supposed to see.
- The pci library emulation will not allow the emulated Amiga access to anything
- else, which should reduce the risk of crashing your machine a tad....
- To tell UAE about the devices, add a line like this to your UAE config
- file:
-
- pci_devices=!0.f.0:!0.d.0:!*1.1.0
-
- OK, this obviously needs explanation... "pci_devices" is assigned a string.
- That string consists of a number of device descriptions, separated by ':'.
- So the above has three device descriptions: "!0.f.0", "!0.d.0" and "!*1.1.0".
- Except for the '!' and '*', those correspond to the identifiers you took down
- in the previous step --- for me, "0.f.0" is one of my Virge/DX cards,
- "0.d.0" is the other, and "1.1.0" is the Trident card that I run X on
- (I assume that you are flexible enough to replace colons with periods ;-).
- Each device can optionally be prefixed by '!' and '*' (in that order!).
-
- The '!' means that UAE should not be concerned about the device already
- being active. This is "active" in a PCI sense. Unfortunately, UAE needs
- to activate a device to use it, and doesn't currently deactivate it. So
- you pretty much need the '!' for now, because otherwise you will only
- ever be able to use the PCI emulation once....
- The '*' indicates your main display. UAE will never make this visible to
- the Amiga. In fact, at the moment it doesn't do *anything* with it.
- Eventually, however, it will need to know about that VGA device to do
- proper initialization of the Virge, so it's probably a good idea to
- put it in there already.
-
- Unfortunately, there still is a problem with getting the Virge cards
- properly initialized by the CGX3 drivers --- it seems as if I/O to the
- cards never makes it through. That's not really a showstopper, as the
- Virge has memory-mapped I/O which can be used instead, and the pci emulation
- takes care of redirecting the I/O. BUT(!) you need to get the Virge cards
- initialized.
- That's what you need XFree86 4.0x for. You will need to set up a config
- file in some place to run it on your Virge card. Make sure you point it
- at the right card, and tell it to use the Virge driver. I have a device
- section like this
-
- Section "Device"
- Identifier "virge"
- BusID "PCI:0:13:0"
- Driver "s3virge"
- EndSection
-
- (the "13" is the "0d" from the identifier --- a=10, b=11, c=12, d=13, e=14,
- f=15). If I wanted to use the Virge on 00:0f:0, I'd use 15 instead of 13.
-
- Setting up X can be tricky, but XF86 4.0 has a great config file, some good
- documentation (and some not so good :( ), and quite frankly, I can't help
- you. If you can't get this going, ask in the appropriate newsgroup or
- read some more documentation, ok?
-
- Once your config file is done, you can start a bare-bones X server on
- the Virge card by typing
-
- # XFree86 -xf86config your_virge_config_file :1 &
-
- This will start a _second_ X server, in addition to the one you are already
- running on your "real" gfx card (you are, right?). Note that there won't
- be anything to see, just the stippled background. That's all that's needed
- to set up the card.
-
- Once you have managed to do this, its easy the rest of the way. So don't
- give up just yet....
-
- Now switch back to your "real" X server (usually CTRL-ALT-F7 will do the trick)
- and start UAE. Copy "pci.library" to your libs: directory.
-
- Next, uncompress the Elbox archive, and choose "Install". WARNING!
- WARNING! WARNING! This will trash your P96 setup. So make sure you
- have a backup to go back to if things don't work out, or if you just
- want P96 back. You have been warned!
-
- When the install is complete, quit UAE and restart it. If all went well,
- you will now see the Cybergraphics logo appear on the monitor connected
- to the Virge, and then have Workbench appear on it. Hooray! You are now
- running Cybergfx, and the card is fully under the control of the Elbox
- driver. You can do everything with it that you could do with a "real"
- Mediator and Virge --- define your own modes with cgxmode, run software
- on it, drag screens.....
- Note, however, that UAE itself doesn't know anything about that gfx card.
- It still talks to you through the window on the "real" X server, and if
- you move the mouse out of that window, UAE loses it. So you might want
- to go fullscreen (F12-s if you have DGA modes enabled).
-
- Worse yet, UAE doesn't know that you probably aren't interested in the
- ECS output, and thus keeps on emulating the native Amiga video system.
- Sometimes, that might be what you want, but usually it isn't. So you
- might want to disable that part of the emulation, by pressing F12-i.
- Just remember to press F12-i again when you actually want to see the
- ECS output, for example because you started a game ;-). UAE-JIT will
- put "NAT" at the end of the lines it prints every second if the native
- ECS graphics are still being emulated, so if you can see that output,
- you'll get a reminder.
-
- Got it working? Great! Enjoy it, and maybe have a look at the next section.
-
- Didn't get it working? Try again. And again. And if it still doesn't work,
- and you think you should mail me (bmeyer@csse.monash.edu.au) for help, be
- sure to include as much detail as possible about your system, what happens,
- what doesn't happen, and so on.
-
-
- B) For Bravehearts Only --- using more than one Virge
- =====================================================
-
- The free Elbox drivers don't actually support more than one card. This
- is due to some hardware limitations of the Mediator, which it is aimed
- at. So to get more than one to work under UAE requires some trickery.
- What essentially happens is that each card gets "its own" PCI interface,
- and is the only one using it (and thus works).
-
- Unfortunately, the drivers weren't meant to do that, either, and have
- some names and values hardcoded in. You'll need to put the included
- "patchVirge" program in the same directory as the "MediatorViRGE" driver
- file. Then run it (from a linux command line --- it's a linux/x86 program!)
- by typing
-
- # ./patchVirge 1
-
- which should output
-
- replacing pattern 1, pos 577
- replacing pattern 2, pos 617
- replacing pattern 2, pos 745
- replacing pattern 3, pos 1806
- replacing pattern 2, pos 1818
- replacing pattern 2, pos 1832
- replacing pattern 2, pos 1862
- replacing pattern 2, pos 1910
- replacing pattern 2, pos 2002
- replacing pattern 4, pos 2486
- replacing pattern 1, pos 35118
- replacing pattern 1, pos 35184
- replacing pattern 1, pos 35210
- replacing pattern 1, pos 35228
- replacing pattern 2, pos 52118
- replacing pattern 1, pos 53076
- replacing pattern 1, pos 53100
- replacing pattern 1, pos 53116
- Replaced 18 patterns
-
- and produce a file "MediatorViRGE.1". Repeat with
-
- # ./patchVirge 2
-
- and
-
- # ./patchVirge 3
-
- For the sake of symmetry, you can also run
-
- # ./patchVirge 0
-
- and get a "MediatorViRGE.0", but apart from slightly different mode names,
- that one is identical to the original MediatorViRGE.
-
- Each of these files is a completely functional driver. Each of them will
- produce screen modes with slightly different modenames, and (more importantly)
- with different mode ids (and don't ask how long it took to find what bytes
- to patch for *that* ;-). Back in UAE, copy as many of them as you have
- Virge cards into the Devs/Monitors of your boot disk. WARNING! The files
- might not be marked executable. After copying, make sure you select each,
- use the "icons->information.." menu item, activate "executable" and
- "save" the changed info.
- If you use MediatorViRGE.0 (I do, so it might be a good idea), you might
- want to remove the original MediatorViRGE driver from Devs/Monitors, because
- otherwise you might get mode-id conflicts (which are a real pain to track
- down, as CGX is very quiet about them).
- One more thing --- each of those drivers uses its own, individual copy of
- the "pci.library". MediatorViRGE.0 uses "pc0.library", MediatorViRGE.1 uses
- "pc1.library" and so on. So you need to copy the right libraries to libs:,
- or things won't work. Except for the name, the libraries are exactly
- identical, but you need to have separate ones. You cannot just copy one
- library over and over again, or even use links --- the names of the libraries
- are contained inside as well.
- Oh, and one more "one more thing". You need to copy a few files in
- "prefs/env-archive/cybergraphx" on your boot drive. There should be a file
- "MediatorViRGEMonitor" there --- copy it to "Mediato1ViRGEMonitor",
- "Mediato2VirgeMonitor" and so on, and of course "Mediato0ViRGEMonitor" as
- well if you use that. Don't worry about the original file; You can keep it
- without causing problems.
-
- Now exit and restart UAE, and the cards should be assigned to the drivers
- in the order you mention them in the config file. You can't currently
- use more than 4 cards, and you should not have more than 4 drivers
- installed at any one time --- but apart from that, it doesn't matter if
- you have more drivers installed than you have cards, because each card
- will only be found once. For example, I have 4 drivers installed, and
- currently only have 2 Virge cards.
- [Note --- I consider it unlikely, but it is possible that you actually need
- to install the full CGX3 package, rather than just the Elbox version. I did
- so while bug hunting, so I cannot promise that it works without. I can't see
- why it wouldn't, though.]
-
- C) Known Bugs
- =============
- You certainly don't want to do a soft reset --- the PCI emulation isn't
- up to that yet, and will not release the cards. Things will crash one
- way or another. Just don't do it!
-
- You *CANNOT* use anything but the Virge driver. No other drivers are
- publicly available, anyway, but just in case you somehow get your hands
- on one --- IT WON'T WORK. If you can legally send it my way, I might be
- able to make it work, but right now, there is quite a bit of Virge
- specific stuff in there.
-
- For some reason, the bottom line of the screen is displayed above the top
- line. I think this is a driver problem, and has nothing to do with the
- pci emulation.
-
- Some 2-monitor configurations in Shapeshifter may give corrupt screen
- display on one monitor. Once again, I suspect the problem is on the
- Amiga side.
-
- D) How did this come about?
- ===========================
-
- A lot of trial and error, and a lot of "where the $@%#$^@ did that value
- come from", which UAE is just great for. And of course the good old
- "Let's return some bogus value, and see where it shows up", which UAE
- is also great for.
-
- I have never seen anything but a picture of a Mediator, and I have
- never seen any Mediator related code other than the Virge driver. This
- means that anything the Virge driver doesn't use, the emulation
- doesn't support. There are many pci.library functions for which I have
- absolutely no idea what they are supposed to do --- the Virge drivers
- only use two.
-
- Personally, I think that a proper pci.library emulation, developed from
- a full and detailed spec, would be a GREAT tool for driver development.
- Developing in an emulation allows for great logging and debugging support
- that working on the real iron just can't provide (Logging every byte ever
- written to your device is just so much more useful than simply seeing
- your Amiga crash and burn). But it appears that Elbox likes to play
- their hand close to their chest, and thus are unwilling to open up
- their specs. I think that's a mistake, but I am not in a position to
- make any decisions....
-
-
- E) If you have a look at the source...
- ======================================
-
- ...you will notice a couple of #define's at in the file pcilib.c, switching
- on or off features.
-
- The first one is "USE_REAL_IO". It is related to the already mentioned
- problems with initializing the Virge cards --- if you set it to 1,
- the pci emulation will use the PCI I/O space rather than the memory
- mapped I/O of the Virge cards. In that case, you *must* provide an
- entry in pci_devices for your main VGA card (it needs to be deactivated
- temporarily when I/O to the Virge occurs). This has never worked for me.
- It might work in a machine that has just one PCI bus, and no AGP bus,
- or if your main VGA card is on the same PCI bus as the Virge. If you get
- this to work, tell me!
- If the PCI emulation ever is to support other drivers, such as the network
- one that seems to float around, this will need to be set to 1. But before
- that happens, I need to find out why XF86 can wake up the Virge in my
- machine, but the emulated Amiga's Virge driver can't.
-
- The second one is called "EVIL_HACK". It's evil. It's a hack. It also
- saves loads and loads of CPU time ;-).
- The Mediator is limited to an 8M address window, which means that it
- cannot at the same time have access to the VGA frame buffer of the
- Virge *and* the memory-mapped I/O area (which is at
- frame_buffer_address+16MB). So each time it wants to access I/O, it
- switches the window 16MB forward, does its access, and switches
- the window back. And the driver isn't very clever about it; If it
- wants to do two accesses to I/O, it still switches the window
- back in between.
- Now, on a Mediator, switching the window is cheap --- store the value in
- some hardware register, and whatever is in that register gets added to
- the address of each access to the PCI space. Under UAE, it's not cheap.
- It requires un-mmapping 8M of memory, and mmapping another 8M. Each time.
- Quite often only to reverse the mappings immediately afterwards. Not good!
- Fortunately, UAE is not limited to a 24 bit address space. So if you enable
- "EVIL_HACK", the pci emulation will search for a 32M address window instead,
- and map the whole 32M space of the Virge at the same time.
- So far, so good. However, the Virge driver doesn't expect this, and
- rather assumes a window switch to provide new stuff in the first 8M of
- Mediator space. And unfortunately, the "switch window" routine doesn't
- return the base address of the Mediator space to use (Bad Thinking there,
- Elbox! You are locking yourself into your current scheme!), so changing
- that assumption is not possible in a non-evil way. However, it *is* possible
- to change in a completely evil way --- after each time the window switch
- function is called, the driver loads the Mediator window base address from
- its own, driver-local storage space. It always loads it from the same spot.
- So the evil thing to do is to "mess with its mind", i.e. to have the
- window switch emulation leave the mappings alone, and instead change
- that base address variable.
- Now, mind you --- it's not the pci.library's to change, and where it
- can be found could quite well be completely different for the next
- driver version. Messing with the internals of another program is
- certainly not "the done thing". But if it saves CPU cycles, who am I
- to reject it?
-
-
-
-
-
-